1 module mruby.array;
2 
3 extern (C):
4 
5 import mruby.value;
6 import mruby.mrb_class;
7 import mruby.object;
8 import mruby;
9 
10 struct mrb_shared_array
11 {
12 	int refcnt;
13 	mrb_int len;
14 	mrb_value* ptr;
15 }
16 
17 struct RArray
18 {
19 	enum mrb_vtype
20 	{
21 		MRB_TT_FALSE = 0,
22 		MRB_TT_FREE = 1,
23 		MRB_TT_TRUE = 2,
24 		MRB_TT_FIXNUM = 3,
25 		MRB_TT_SYMBOL = 4,
26 		MRB_TT_UNDEF = 5,
27 		MRB_TT_FLOAT = 6,
28 		MRB_TT_CPTR = 7,
29 		MRB_TT_OBJECT = 8,
30 		MRB_TT_CLASS = 9,
31 		MRB_TT_MODULE = 10,
32 		MRB_TT_ICLASS = 11,
33 		MRB_TT_SCLASS = 12,
34 		MRB_TT_PROC = 13,
35 		MRB_TT_ARRAY = 14,
36 		MRB_TT_HASH = 15,
37 		MRB_TT_STRING = 16,
38 		MRB_TT_RANGE = 17,
39 		MRB_TT_EXCEPTION = 18,
40 		MRB_TT_FILE = 19,
41 		MRB_TT_ENV = 20,
42 		MRB_TT_DATA = 21,
43 		MRB_TT_FIBER = 22,
44 		MRB_TT_MAXDEFINE = 23
45 	}
46 	mrb_vtype tt;
47 	uint color;
48 	uint flags;
49 	RClass* c;
50 	RBasic* gcnext;
51 	mrb_int len;
52 	union
53 	{
54 		mrb_int capa;
55 		mrb_shared_array* shared_;
56 	}
57 	mrb_value* ptr;
58 }
59 
60 void mrb_ary_decref (mrb_state*, mrb_shared_array*);
61 void mrb_ary_modify (mrb_state*, RArray*);
62 mrb_value mrb_ary_new_capa (mrb_state*, mrb_int);
63 mrb_value mrb_ary_new (mrb_state* mrb);
64 mrb_value mrb_ary_new_from_values (mrb_state* mrb, mrb_int size, const(mrb_value)* vals);
65 mrb_value mrb_assoc_new (mrb_state* mrb, mrb_value car, mrb_value cdr);
66 void mrb_ary_concat (mrb_state*, mrb_value, mrb_value);
67 mrb_value mrb_ary_splat (mrb_state*, mrb_value);
68 void mrb_ary_push (mrb_state*, mrb_value, mrb_value);
69 mrb_value mrb_ary_pop (mrb_state* mrb, mrb_value ary);
70 mrb_value mrb_ary_ref (mrb_state* mrb, mrb_value ary, mrb_int n);
71 void mrb_ary_set (mrb_state* mrb, mrb_value ary, mrb_int n, mrb_value val);
72 void mrb_ary_replace (mrb_state* mrb, mrb_value a, mrb_value b);
73 mrb_value mrb_check_array_type (mrb_state* mrb, mrb_value self);
74 mrb_value mrb_ary_unshift (mrb_state* mrb, mrb_value self, mrb_value item);
75 mrb_value mrb_ary_entry (mrb_value ary, mrb_int offset);
76 mrb_value mrb_ary_shift (mrb_state* mrb, mrb_value self);
77 mrb_value mrb_ary_clear (mrb_state* mrb, mrb_value self);
78 mrb_value mrb_ary_join (mrb_state* mrb, mrb_value ary, mrb_value sep);
79 mrb_value mrb_ary_resize (mrb_state* mrb, mrb_value ary, mrb_int len);
80 mrb_int mrb_ary_len (mrb_state* mrb, mrb_value ary);